﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using CDS.ProgramacionWCF.Dominio;

namespace CDS.ProgramacionWCF.Persistencia
{
    public class ProgramacionDAO
    {
        //public List<Programacion> ListarProgramacion() {
        //    try
        //    {
        //        using (CDSDbEntities contexto=new CDSDbEntities())
        //        {
        //            List<Programacion> programaciones = new List<Programacion>();
        //            List<CDS_T_PROGRAMACION> progrEntity= (from x in contexto.CDS_T_PROGRAMACION select x).ToList();
        //            foreach (var item in progrEntity)
        //            {

        //                Programacion p = new Programacion();
        //                p.idProgramacion=item.ID_PROGRAMACION;
        //                p.ruc =item.RUC;
        //                p.razSocial=item.RAZ_SOCIAL;
        //                p.fecha=item.FECHA;
        //                p.origen=item.ORIGEN;
        //                p.destino=item.DESTINO;
        //                p.asientos=item.ASIENTOS;
        //                p.stock=item.STOCK;
        //                p.precio = Convert.ToDecimal(item.PRECIO);
        //                programaciones.Add(p);
        //            }
        //            return programaciones;
        //        }
        //    }
        //    catch (Exception)
        //    {
        //        return null;
        //    }
        //}
        public List<Programacion> ListarProgramacion(string origen, string destino, string fecini, string fecfin, string cant)
        {
            try
            {
                DateTime fec1 = Convert.ToDateTime(fecini);
                DateTime fec2 = Convert.ToDateTime(fecfin);
                int cant1 = Convert.ToInt32(cant);
                using (CDSDbEntities contexto = new CDSDbEntities())
                {
                    List<Programacion> programaciones = new List<Programacion>();
                    List<CDS_T_PROGRAMACION> progrEntity = (from x in contexto.CDS_T_PROGRAMACION
                                                            where x.ORIGEN.Contains(origen.Trim().ToUpper()) 
                                                            && x.DESTINO.Contains(destino.Trim().ToUpper())
                                                            && x.FECHA>= fec1
                                                            && x.FECHA<=fec2
                                                            && x.STOCK>=cant1
                                                            select x).ToList();
                    // x.FECHA>= fec1
                   //& x.FECHA<=fec2
                    foreach (var item in progrEntity)
                    {
                        
                        Programacion p = new Programacion();
                        p.idProgramacion = item.ID_PROGRAMACION;
                        p.ruc = item.RUC;
                        p.razSocial = item.RAZ_SOCIAL;
                        p.fecha = item.FECHA;
                        p.origen = item.ORIGEN;
                        p.destino = item.DESTINO;
                        p.asientos = item.ASIENTOS;
                        p.stock = item.STOCK;
                        p.precio = Convert.ToDecimal(item.PRECIO);
                        programaciones.Add(p);
                    }
                    return programaciones;
                }
            }
            catch (Exception)
            {
                return null;
            }
        }
        public Programacion ObtenerProgramacion(string idProgramacion)
        {
            try
            {
                using (CDSDbEntities contexto = new CDSDbEntities())
                {
                    Programacion progr = new Programacion();
                    CDS_T_PROGRAMACION progrEntity = (from x in contexto.CDS_T_PROGRAMACION 
                                                      where x.ID_PROGRAMACION.Equals(idProgramacion)
                                                      select x).First();
                    
                        Programacion p = new Programacion();
                        p.idProgramacion = progrEntity.ID_PROGRAMACION;
                        p.ruc = progrEntity.RUC;
                        p.razSocial = progrEntity.RAZ_SOCIAL;
                        p.fecha = progrEntity.FECHA;
                        p.origen = progrEntity.ORIGEN;
                        p.destino = progrEntity.DESTINO;
                        p.asientos = progrEntity.ASIENTOS;
                        p.stock = progrEntity.STOCK;
                        p.precio = Convert.ToDecimal(progrEntity.PRECIO);
                        
                    
                    return p;
                }
            }
            catch (Exception)
            {
                return null;
            }
        }
        public string RegistrarReserva(string idProgramacion, string cant) {
            try
            {
                using (CDSDbEntities contexto=new CDSDbEntities())
                {
                    CDS_T_PROGRAMACION p = (from x in contexto.CDS_T_PROGRAMACION
                                            where x.ID_PROGRAMACION == idProgramacion
                                            select x).First();
                    p.STOCK = p.STOCK - Convert.ToInt32(cant);
                    contexto.SaveChanges();
                    return "SI";
                }
            }
            catch (Exception)
            {
                return "NO";
            }
        }
    }
}